package cn.xyfmzmy.observer.demo;

/**
 * 观察者模式：消息生成者 ——> 监听器
 * 订阅发表模型：消息生成者 ——> 总线 ——> 监听器
 * 订阅发表模型可以让监听器与消息生成者解耦，监听器只关注自己感兴趣的消息，消息生成者只关注自己需要发送的消息
 */
public class Main {

    // 新增了一层电视台，使气象站和用户之间解耦
    public static void main(String[] args) throws InterruptedException {
        TVStation tvStation = new TVStation();
        WeatherStation weatherStation = new WeatherStation(tvStation);
        User tom = new User("Tom", (info) -> {
            if (info.equals("晴天")) {
                System.out.println("晴天，Tom出去玩");
            } else {
                System.out.println("雨天，Tom待在家");
            }
        });
        User jerry = new User("Jerry", (info) -> {
            if (info.equals("晴天")) {
                System.out.println("晴天，Jerry去旅游");
            }
        });
        tvStation.subscribe(tom, WeatherUpdateEvent.class);
        tvStation.subscribe(jerry,WeatherUpdateEvent.class);

        weatherStation.start();
    }
}
